ANDROID: struct io_uring ABI preservation hack for 5.10.162 changes

In the 5.10.162 release, the io_uring code was synced with the version
that is in the 5.15.y kernel tree in order to resolve a huge number of
potential, and known, problems with the codebase.  This makes for a more
secure and easier-to-update-and-maintain 5.10.y kernel tree, so this is
a great thing, however this caused some issues when it comes to the
Android KABI preservation and checking tools.

A number of the io_uring structures get used in other core kernel
structures, only as "opaque" pointers, so there is not any real ABI
breakage.  But, due to the visibility of the structures going away, the
CRC values of many scheduler variables and functions were changed.

In order to preserve the CRC values, to prevent all device kernels to be
forced to rebuild for no reason whatsoever from a functional point of
view, we need to keep around the "old" io_uring structures for the CRC
calculation only.  This is done by the following definitions of struct
io_identity and struct io_uring_task which will only be visible when the
CRC calculation build happens, not in any functional kernel build.

Yes, this all is a horrible hack, and these really are not the true
structures that any code uses, but so life is in the world of stable
apis.

Bug: 161946584
Fixes: 788d0824269b ("io_uring: import 5.15-stable io_uring")
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
Change-Id: I2294f220ae78fe9aa32ee25b81829ae765e9deb2
diff --git a/include/linux/io_uring.h b/include/linux/io_uring.h
index 649a4d7..5ae871a 100644
--- a/include/linux/io_uring.h
+++ b/include/linux/io_uring.h
@@ -5,6 +5,68 @@
 #include <linux/sched.h>
 #include <linux/xarray.h>
 
+#ifdef __GENKSYMS__
+/*
+ * ANDROID ABI HACK
+ *
+ * In the 5.10.162 release, the io_uring code was synced with the version
+ * that is in the 5.15.y kernel tree in order to resolve a huge number of
+ * potential, and known, problems with the codebase.  This makes for a more
+ * secure and easier-to-update-and-maintain 5.10.y kernel tree, so this is
+ * a great thing, however this caused some issues when it comes to the
+ * Android KABI preservation and checking tools.
+ *
+ * A number of the io_uring structures get used in other core kernel
+ * structures, only as "opaque" pointers, so there is not any real ABI
+ * breakage.  But, due to the visibility of the structures going away, the
+ * CRC values of many scheduler variables and functions were changed.
+ *
+ * In order to preserve the CRC values, to prevent all device kernels to be
+ * forced to rebuild for no reason whatsoever from a functional point of
+ * view, we need to keep around the "old" io_uring structures for the CRC
+ * calculation only.  This is done by the following definitions of struct
+ * io_identity and struct io_uring_task which will only be visible when the
+ * CRC calculation build happens, not in any functional kernel build.
+ *
+ * Yes, this all is a horrible hack, and these really are not the true
+ * structures that any code uses, but so life is in the world of stable
+ * apis...
+ * The real structures are in io_uring/io_uring.c, see the ones there if
+ * you need to touch or do anything with it.
+ *
+ * NEVER touch these structure definitions, they are fake and not valid code.
+ */
+struct io_identity {
+	struct files_struct		*files;
+	struct mm_struct		*mm;
+#ifdef CONFIG_BLK_CGROUP
+	struct cgroup_subsys_state	*blkcg_css;
+#endif
+	const struct cred		*creds;
+	struct nsproxy			*nsproxy;
+	struct fs_struct		*fs;
+	unsigned long			fsize;
+#ifdef CONFIG_AUDIT
+	kuid_t				loginuid;
+	unsigned int			sessionid;
+#endif
+	refcount_t			count;
+};
+
+struct io_uring_task {
+	/* submission side */
+	struct xarray		xa;
+	struct wait_queue_head	wait;
+	struct file		*last;
+	struct percpu_counter	inflight;
+	struct io_identity	__identity;
+	struct io_identity	*identity;
+	atomic_t		in_idle;
+	bool			sqpoll;
+};
+#endif	/* ANDROID ABI HACK */
+
+
 #if defined(CONFIG_IO_URING)
 struct sock *io_uring_get_socket(struct file *file);
 void __io_uring_cancel(bool cancel_all);
diff --git a/io_uring/io-wq.h b/io_uring/io-wq.h
index bf5c4c53..300a695 100644
--- a/io_uring/io-wq.h
+++ b/io_uring/io-wq.h
@@ -1,6 +1,17 @@
 #ifndef INTERNAL_IO_WQ_H
 #define INTERNAL_IO_WQ_H
 
+#ifdef __GENKSYMS__
+/*
+ * ANDROID ABI HACK
+ *
+ * See the big comment in the linux/io_uring.h file for details.  This
+ * include is not needed for any real functionality, but must be here to
+ * preserve the CRC of a number of variables and functions.
+ */
+#include <linux/io_uring.h>
+#endif
+
 #include <linux/refcount.h>
 
 struct io_wq;
diff --git a/io_uring/io_uring.c b/io_uring/io_uring.c
index 945faf0..35a9bcd 100644
--- a/io_uring/io_uring.c
+++ b/io_uring/io_uring.c
@@ -461,6 +461,15 @@
 	};
 };
 
+#ifndef __GENKSYMS__
+/*
+ * ANDROID ABI HACK
+ *
+ * See the big comment in the linux/io_uring.h file for details.  This
+ * structure definition should NOT be used if __GENKSYMS__ is enabled,
+ * as a "fake" structure definition has already been read in the
+ * linux/io_uring.h file in order to preserve the Android kernel ABI.
+ */
 struct io_uring_task {
 	/* submission side */
 	int			cached_refs;
@@ -477,6 +486,7 @@
 	struct callback_head	task_work;
 	bool			task_running;
 };
+#endif
 
 /*
  * First field must be the file pointer in all the